package com.wang.interview;

public class Wildcards {

	public static void main(String[] args) {
//		就算容器里装的东西之间有继承关系，但容器之间是没有继承关系的。所以我们不可以把
//		Plate<Apple>的引用传递给Plate<Fruit>,下面的编译通不过		
//		Plate<Fruit> p = new Plate<Apple>(new Apple());
		
//		 ？extends Fruit
//		我们使用上界通配符（Upper Bounds Wildcards） ？extends Fruit
//		一个能放水果以及一切是水果派生类的盘子
		Plate<? extends Fruit> p = new Plate<RedApple>(new RedApple());
		
//		下界通配符（Lower Bounds Wildcards）  Plate<？ super Fruit>
//		能放水果以及一切是水果基类的盘子
		Plate<? super GreenApple> p2 = new Plate<Food>(new Food());
	}
}

class Food{}
class Fruit extends Food{}
class Meat extends Food{}

class Apple extends Fruit {}
class Banana extends Fruit{}

class Pork extends Meat{}
class Beef extends Meat{}

class RedApple extends Apple{}
class GreenApple extends Apple{}


class Plate<T>{
	private T item;
    public Plate(T t){item=t;}
    public void set(T t){item=t;}
    public T get(){return item;}
}